<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    // 数组转map数据 

    var arr = [1, 2, 3];
    var oKey = { a: 1, b: 2 };

    // 存放键值对的二维数组
    var list = [[100, 200], ["hello", "world"], [true, false], [null, undefined], [arr, arr], [oKey, oKey]];

    // (1) 手动转换
    // var m = new Map();
    // list.forEach((item)=>{
    //     let [key,val] = item;
    //     m.set(key,val);
    // })
    // console.log(m);

    // (2) new Map()可以直接 接收 键值对的二维数组
    var m = new Map(list);
    console.log(m);



    // Map数据结构转数组
    // (1) 手动转换
    // var arr = [];
    // m.forEach((value,key)=>{
    //     arr.push([key,value]);
    // })
    // console.log(arr);

    // (2) 借助Array.from() 

    // var arr = Array.from(m);
    // console.log(arr);

    // var arr = [...m];
    // console.log(arr);


    // Map应用

    /* var list = [1,2,3,3,2,1,3,1,2,1,2,1,3];

    var obj = {};
    for(var item of list){ // 遍历数组
        if(obj[item]){ // 将数组的每个元素作为对象的键名(隐式转字符串)
            obj[item] ++ 
        }else{  
            obj[item] = 1;
        }
    }
    console.log(obj);

    var uni = [];
    for(var key in obj){
        uni.push(key);
    }
    console.log(uni);
 */


    var list = [1, 2, 3, 3, 2, 1, 3, 1, 2, 1, 2, 1, 3];

    var m = new Map();
    for (var item of list) { // 遍历数组
        if (m.has(item)) { // 将数组的每个元素作为对象的键名(隐式转字符串)
            var cur = m.get(item);
            m.set(item, cur + 1)
        } else {
            m.set(item, 1);
        }
    }
    console.log(m);

    var uni = []; 
    m.forEach((value,key)=>{
        uni.push(key);
    })
    console.log(uni);








</script>

</html>